package com.migration.service;

import com.migration.model.migration.MigrationScript;

import java.util.List;
import java.util.Map;

/**
 * 迁移脚本服务接口
 */
public interface MigrationScriptService {

    /**
     * 获取所有迁移脚本
     *
     * @return 所有迁移脚本列表
     */
    List<MigrationScript> getAllScripts();
    
    /**
     * 根据名称获取迁移脚本
     *
     * @param name 脚本名称
     * @return 迁移脚本
     */
    MigrationScript getScriptByName(String name);

    /**
     * 执行迁移脚本
     *
     * @param scriptName 脚本名称
     * @return 执行结果
     */
    Map<String, Object> executeMigrationScript(String scriptName);
    
    /**
     * 按顺序执行所有迁移脚本
     *
     * @return 执行结果
     */
    Map<String, Object> executeAllMigrationScripts();
    
    /**
     * 注册新的迁移脚本
     *
     * @param script 迁移脚本
     */
    void registerScript(MigrationScript script);
    
    /**
     * 执行自定义SQL从旧数据库查询数据
     *
     * @param sql 查询SQL
     * @return 查询结果列表
     */
    List<Map<String, Object>> queryFromOldDatabase(String sql);
    
    /**
     * 执行自定义SQL从新数据库查询数据
     *
     * @param sql 查询SQL
     * @return 查询结果列表
     */
    List<Map<String, Object>> queryFromNewDatabase(String sql);
    
    /**
     * 执行自定义SQL更新新数据库
     *
     * @param sql 更新SQL
     * @return 更新影响的行数
     */
    int updateNewDatabase(String sql);
    
    /**
     * 执行自定义跨库迁移
     * 可以先从旧库查询数据，进行处理后插入新库
     *
     * @param sourceSql 源数据库查询SQL
     * @param dataProcessor 数据处理器，接收查询结果并返回处理后的更新SQL
     * @return 执行结果
     */
    Map<String, Object> executeCustomMigration(String sourceSql, 
                                            java.util.function.Function<List<Map<String, Object>>, String> dataProcessor);
} 